<?php
//------------------------------------------------------------ Contraintes d'accès de la page

	// on vérifie que cette page est appelée à partir de l'index et que l'utilisateur a le droit d'édition
	if(isset($_SESSION) && ($GLOBALS['USER']['level'] >= 4 || $GLOBALS['USER']['admin'])){
	
		// l'identifiant de la donnée à supprimer est indiqué par un entier
		if(isset($_GET['id']) && numericInt($_GET['id'])){
		
			$nb_airesgeo = valueExists((int)$_GET['id'], "CODEAIREGEOGRAPHIQUE", "aire_geographique", $connexion);
			
			if($nb_airesgeo == 1){ // l'aire géographique à éditer existe et son identifiant est unique

?>
<?php
//------------------------------------------------------------ Fonctions spécifiques à la page

// on créé la fonction permettant l'affichage des aires géographiques
function afficherOptions($tab, $lvl=0){

	global $dv_airesup; //on récupère la valeur par défaut du champ

	if(count($tab) > 0){
		foreach($tab as $value){
			if($value[0] == $dv_airesup){
				echo "<option style=\"padding-left: ".(($lvl*15)+20)."px\" value=\"".$value[0]."\" selected=\"selected\">".htmlentities($value[2], ENT_NOQUOTES, "UTF-8")."</option>";
			}else{
				echo "<option style=\"padding-left: ".(($lvl*15)+20)."px\" value=\"".$value[0]."\">".htmlentities($value[2], ENT_NOQUOTES, "UTF-8")."</option>";
			}
			if(!is_null($value[3])){
				afficherOptions($value[3], $lvl+1);
			}
		}
		unset($value);
	}else{
		echo "<option disabled=\"disabled\">Aucune aire géo. enregistrée</option>";
	}
	
}

// on créé la fonction permettant de tester si une aire est sous-aire de l'aire indiquée
function estSousAire($aire, $sousAire, $tab, $rechSS=false){

	if(count($tab) > 0){
		foreach($tab as $value){
			if(!$rechSS){
				if($value[0] == $sousAire){
					return false;
				}else if($value[0] == $aire){
					if(!is_null($value[3])){
						if(estSousAire($aire, $sousAire, $value[3], true)){
							return true;
						}
					}
				}else{
					if(!is_null($value[3])){
						if(estSousAire($aire, $sousAire, $value[3])){
							return true;
						}
					}
				}
			}else{
				if($value[0] == $sousAire){
					return true;
				}else{
					if(!is_null($value[3])){
						if(estSousAire($aire, $sousAire, $value[3], true)){
							return true;
						}
					}
				}
			}
		}
		unset($value);
	}
	
	return false;
	
}
?>
<?php
//------------------------------------------------------------ Valeur des champs avant saisie

	// récupération des informations de l'aire géographique
	$query_recuperation_airegeo = "SELECT a.NOMAIREGEOGRAPHIQUE, a.AIR_CODEAIREGEOGRAPHIQUE, p.CODEPAYS ";
	$query_recuperation_airegeo .= "FROM aire_geographique a ";
	$query_recuperation_airegeo .= "LEFT JOIN est_lie_pays p ON p.CODEAIREGEOGRAPHIQUE = a.CODEAIREGEOGRAPHIQUE ";
	$query_recuperation_airegeo .= "WHERE a.CODEAIREGEOGRAPHIQUE = ".$_GET['id']." ";
	
	$result_recuperation_airegeo = mysql_query($query_recuperation_airegeo, $connexion) or logError("RECUPERATION AIRE GEOGRAPHIQUE-".$query_recuperation_airegeo."-".mysql_error());
	
	while($tab_recuperation_airegeo = mysql_fetch_row($result_recuperation_airegeo)){

		$dv_nom = $tab_recuperation_airegeo[0]; // valeur du champ nom (edt_nom)
		$dv_airesup = $tab_recuperation_airegeo[1]; // valeur du champ nom (edt_airesup)
		$dv_pays[] = $tab_recuperation_airegeo[2]; // valeur du champ nom (edt_pays)
		
	}
	
	mysql_free_result($result_recuperation_airegeo);
	
	// valeurs possibles du champ edt_airesup
	$lst_airesgeo = recSQLRequest_1n(null, "CODEAIREGEOGRAPHIQUE", "AIR_CODEAIREGEOGRAPHIQUE", "aire_geographique", $connexion);
	
	// Valeurs possibles du champ edt_pays
	$query_recuperation_pays = "SELECT CODEPAYS AS id, NOMPAYS AS nom FROM pays ORDER BY nom";
	
	$result_recuperation_pays =  mysql_query($query_recuperation_pays, $connexion) or logError("RECUPERATION PAYS-".$query_recuperation_pays."-".mysql_error());

	$selectPays = array(); // on créé un tableau qui contient la liste des auteurs ainsi que les informations de chacun
	$nb_pays = 0;
	while($tab_recuperation_pays = mysql_fetch_assoc($result_recuperation_pays)){
		$selectPays[$nb_pays] = $tab_recuperation_pays;
		$nb_pays++;
	}
	
	mysql_free_result($result_recuperation_pays);
	
?>
<?php
//------------------------------------------------------------ Traitements si le formulaire a été envoyé

/********************************* Règles :

	- le nom de l'aire géographique ne peut pas être vide
	- l'aire géographique supérieure soit exister dans la BDD
	- l'aire géographique supérieure ne peut pas être l'aire géographique à éditer
	- au moins un pays doit être associé
	- les pays doivent exister dans la BDD

*****************************************/

	$statut = array(); // indique le statut du traitement du formulaire (echec ou succes) - tableau contenant les messages à afficher
	$erreur = false; // indique si une erreur a été rencontrée lors du traitement

	trimTabByKey($_POST, "edt_"); // appel à la fonction trimTabByKey() définie dans fonctions.php
	
	//---------------------------------- Contrôle des données ----------------------------------
	
	if(isset($_POST['form_sent'])){ // si le formulaire est envoyé
	
		// Contrôle des données du nom de l'aire géographique
		if(isset($_POST['edt_nom']) && is_string($_POST['edt_nom'])){
			if(emptyString($_POST['edt_nom'])){
				$statut[] = "Le nom de l'aire géographique ne peut être effacé";
				$erreur = true;
			}else{
				$dv_nom = $_POST['edt_nom'];
			}
		}else{
			$statut[] = "Aucun nom de l'aire géographique indiqué";
			$erreur = true;
		}
		
		// Contrôle des données de l'aire supérieure
		if(isset($_POST['edt_airesup']) && is_string($_POST['edt_airesup'])){
			if(!numericInt($_POST['edt_airesup']) && $_POST['edt_airesup'] != "none"){
				$statut[] = "Format de l'aire supérieure incorrect";
				$erreur = true;
			}else{
				if($_POST['edt_airesup'] != "none"){
					if($_POST['edt_airesup'] != $_GET['id']){
						if(!estSousAire($_GET['id'], $_POST['edt_airesup'], $lst_airesgeo)){
							if(valueExists((int)$_POST['edt_airesup'], "CODEAIREGEOGRAPHIQUE", "aire_geographique", $connexion) == 1){
								$dv_airesup = $_POST['edt_airesup'];
							}else{
								$statut[] = "L'aire supérieure indiquée n'existe pas";
								$erreur = true;
							}
						}else{
							$statut[] = "L'aire supérieure ne peut pas être dans une de ses sous-aire";
							$erreur = true;
						}
					}else{
						$statut[] = "L'aire supérieure ne peut pas être l'aire actuelle";
						$erreur = true;
					}
				}else{
					$dv_airesup = null;
				}
			}
		}else{
			$statut[] = "Aucune aire supérieure indiquée";
			$erreur = true;
		}
		
		// Contrôle des données des pays associés
		if(isset($_POST['edt_pays']) && is_array($_POST['edt_pays'])){
			$nbPays = count($_POST['edt_pays']);
			if($nbPays > 0){
				if(uniqueValues($_POST['edt_pays'])){
					$new_dv_pays = array();
					$errPays = false;
					for($i=0; $i<$nbPays; $i++){
						if(!numericInt($_POST['edt_pays'][$i])){
							$statut[] = "Format du pays (".($i+1).") incorrect";
							$erreur = true;
							$errPays = false;
						}else{
							if(valueExists((int)$_POST['edt_pays'][$i], "CODEPAYS", "pays", $connexion) == 1){
								$new_dv_pays[$i] = $_POST['edt_pays'][$i];
							}else{
								$statut[] = "Un des pays n'existe pas";
								$erreur = true;
								$errPays = false;
							}
						}
					}
					if(!$errPays){
						$dv_pays = $new_dv_pays;
					}
				}else{
					$statut[] = "Un pays est indiqué plusieurs fois";
					$erreur = true;
				}
			}else{
				$statut[] = "Au moins un pays doit être indiqué";
				$erreur = true;
			}
		}else{
			$statut[] = "Aucun pays indiqué";
			$erreur = true;
		}
		
		//---------------------------------- Modification de l'aire géographique ----------------------------------
	
		if(!$erreur){ // aucune erreur n'a été rencontrée jusqu'ici
		
			$query_modification_airegeo = "UPDATE aire_geographique ";
			$query_modification_airegeo .= "SET NOMAIREGEOGRAPHIQUE = ".mysqlString($_POST['edt_nom'])." ";
			if($_POST['edt_airesup'] == "none"){
				$query_modification_airegeo .= ", AIR_CODEAIREGEOGRAPHIQUE = NULL ";
			}else{
				$query_modification_airegeo .= ", AIR_CODEAIREGEOGRAPHIQUE = ".$_POST['edt_airesup']." ";
			}
			$query_modification_airegeo .="WHERE CODEAIREGEOGRAPHIQUE = ".$_GET['id']." ";
			
			$result_modification_airegeo = mysql_query($query_modification_airegeo, $connexion) or logError("MODIFICATION AIRE GEOGRAPHIQUE-".$query_modification_airegeo."-".mysql_error());
		
			if($result_modification_airegeo === true){
			
				// Suppression des anciens liens avec les familles
				$query_suppression_liens_airegeo_pays = "DELETE FROM est_lie_pays WHERE CODEAIREGEOGRAPHIQUE = ".$_GET['id']." ";
				
				$result_suppression_liens_airegeo_pays = mysql_query($query_suppression_liens_airegeo_pays, $connexion) or logError("SUPPRESSION LIENS AIRE GEOGRAPHIQUE / PAYS-".$query_suppression_liens_airegeo_pays."-".mysql_error());
			
				if($result_suppression_liens_airegeo_pays === true){
			
					// Ajout des informations dans les tables EST_LIE_PAYS
					for($i=0; $i<$nbPays; $i++){
					
						$query_ajout_lien_airegeo_pays = "INSERT INTO est_lie_pays(CODEPAYS, CODEAIREGEOGRAPHIQUE) ";
						$query_ajout_lien_airegeo_pays .= "VALUES(".$_POST['edt_pays'][$i].", ".$_GET['id'].") ";
						
						$result_ajout_lien_airegeo_pays = mysql_query($query_ajout_lien_airegeo_pays, $connexion) or logError("CREATION LIEN AIRE GEOGRAPHIQUE / PAYS-".$query_ajout_lien_airegeo_pays."-".mysql_error());
					
						if($result_ajout_lien_airegeo_pays === false){
							$statut[] = "Erreur critique à la création du lien ".($i+1)." aire géographique/pays";
							$erreur = true;
						}
					
					}
					
				}else{
					$statut[] = "Erreur critique lors de la modification de l'aire géographique";
					$erreur = true;
				}
				
			}else{
				$statut[] = "Erreur critique lors de la modification de l'aire géographique";
				$erreur = true;
			}
			
			if(!$erreur){ // aucune erreur n'a été rencontrée jusqu'ici
				$statut[] = "Les informations de l'aire géographique ont été modifiées";
				logAction("AIRE GEOGRAPHIQUE (id: ".$_GET['id'].") MODIFIEE par ".capitalise($GLOBALS['USER']['prenom'])." ".mb_strtoupper($GLOBALS['USER']['nom'])." (".$GLOBALS['USER']['login'].")");
			}
		
		}
		
	}
?>
<?php
//------------------------------------------------------------ Affichage du statut si le formulaire a été envoyé

	if(isset($_POST['form_sent'])){ // si le formulaire est envoyé
		
		if($erreur){
			afficherStatut($statut, 3); // appel à la fonction afficherStatut() définie dans fonctions.php
		}else{
			afficherStatut($statut, 1); // appel à la fonction afficherStatut() définie dans fonctions.php
		}
	
	}

?>
<?php
	boutonRetour("index.php?p=gestion/airegeographiques_gere"); // // appel à la fonction boutonRetour() définie dans fonctions.php
?>
<form method="post" action="index.php?p=gestion/airegeographiques_edite&amp;id=<?php echo $_GET['id']; ?>" onsubmit="return selectionnerTout('edt_pays');">
	<table class="formulaire" style="margin-left: auto; margin-right: auto;">
		<tr>
			<th class="titre" colspan="2">Modificartion des informations d'une aire géographique</th>
		</tr>
		<tr>
			<td style="width: 120px" class="etiquette">Nom * :</td>
			<td style="width: 350px" class="champ"><input type="text" name="edt_nom" size="25" value="<?php echo htmlentities($dv_nom, ENT_COMPAT, "UTF-8"); ?>" /></td>
		</tr>
		<tr>
			<td class="etiquette">Aire supérieure :</td>
			<td class="champ">
				<select id="edt_airesup" name="edt_airesup">
					<option value="none">Aucune</option>
					<optgroup label="Aires géographiques :">
						<?php afficherOptions($lst_airesgeo); ?>
					</optgroup>
				</select>
				<input type="text" class="recherche" id="srch_airegeo" value="recherche..." size="10" onfocus="clearField('srch_airegeo', 'recherche...');" onblur="resetField('srch_airegeo', 'recherche...');" onkeyup="trierSelect('edt_airesup', 'srch_airegeo');" />
			</td>
		</tr>
		<tr>
			<td class="etiquette">Pays associé(s) * :</td>
			<td class="champ">
				<div style="float: left;">
					<b>Liste :</b><br />
					<select id="lst_pays" name="lst_pays[]" multiple="multiple" style="min-width: 120px;" ondblclick="transfererOptions('lst_pays', 'edt_pays');" size="6">
						<?php
							if($nb_pays > 0){
								foreach($selectPays as $pays){
									if(!in_array($pays['id'], $dv_pays)){
										echo "<option value=\"".$pays['id']."\">".htmlentities(capitalise($pays['nom']), ENT_NOQUOTES, "UTF-8")."</option>";
									}
								}
								unset($pays);
							}else{
								echo "<option disabled=\"disabled\">Aucun pays enregistré</option>";
							}
						?>
					</select>
				</div>
				<div style="float: left; margin-left: 10px; margin-right: 12px; padding-top: 40px;">
					<input type="button" value=">>" onclick="transfererOptions('lst_pays', 'edt_pays')" /><br />
					<input type="button" value="<<" onclick="transfererOptions('edt_pays', 'lst_pays')" />
				</div>
				<div style="float: left;">
					<b>Sélection :</b><br />
					<select id="edt_pays" name="edt_pays[]" multiple="multiple" style="min-width: 120px;" ondblclick="transfererOptions('edt_pays', 'lst_pays');" size="6">
						<?php
							if($nb_pays > 0){
								foreach($selectPays as $pays){
									if(in_array($pays['id'], $dv_pays)){
										echo "<option value=\"".$pays['id']."\" selected=\"selected\">".htmlentities(capitalise($pays['nom']), ENT_NOQUOTES, "UTF-8")."</option>";
									}
								}
								unset($pays);
							}
						?>
					</select>
				</div>
				<div style="clear: both;">
					<input type="text" class="recherche" id="srch_pays" style="vertical-align: top;" value="recherche..." size="10" onfocus="clearField('srch_pays', 'recherche...');" onblur="resetField('srch_pays', 'recherche...');" onkeyup="trierSelect('lst_pays', 'srch_pays');" />
					<br />
					<input type="button" value="Ajouter un pays" onclick="popup('popup.php?p=gestion/pays_ajoute_popup&amp;maj=lst_pays[]&amp;sel=1', 400, 300);" />
					<hr />
					1 pays minimum
				</div>
			</td>
		</tr>
		<tr>
			<td class="envoi" colspan="2"><input type="submit" value="Modifier" /><input type="hidden" name="form_sent" value="1" /></td>
		</tr>
		<tr>
			<td class="legende" colspan="2">* = champs obligatoires</td>
		</tr>
	</table>
</form>
<div class="information">
	<div class="titre">Informations</div>
	<h4>Aire supérieure :</h4>
	<p>Si l'aire géographique à modifier est contenue dans une autre aire géographique, indiquez cette-dernière avec ce champ.</p>
</div>
<?php
//------------------------------------------------------------ Accès refusé à la page

			}else{
				afficherStatut("L'aire géographique à éditer n'existe pas", 3); // appel à la fonction afficherStatut() définie dans fonctions.php
			}

		}else{
			afficherStatut("L'aire géographique à éditer n'est pas ou mal indiquée", 3); // appel à la fonction afficherStatut() définie dans fonctions.php
		}

	}else{
		if(isset($_SESSION)){
			if(!isset($_SESSION['user_id'])){ // si l'utilisateur n'est pas connecté
				include("pages/connexion.php");
			}else{ // si l'utilisateur est connecté et qu'il n'a pas accès à la page, c'est qu'il n'a pas le droit d'utilisation nécessaire
				include("pages/401.htm");
			}
		}
	}

?>